import 'package:flutter/material.dart';
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
import 'package:get/get.dart';
import 'package:openim/pages/chat/group_setup/group_setup_logic.dart';
import 'package:openim_common/openim_common.dart';

class EditGroupAnnouncementLogic extends GetxController {
  final groupSetupLogic = Get.find<GroupSetupLogic>();
  late TextEditingController inputCtrl;
  final maxLength = 500; // 群公告最大长度

  // 新增：是否为只读模式
  final isReadOnly = false.obs;
  
  // 添加可观察变量
  final _currentLength = 0.obs;
  final _canSave = false.obs;
  
  // 保存原始内容用于比较
  late String _originalContent;

  @override
  void onInit() {
    // 检查是否为只读模式
    isReadOnly.value = Get.arguments?['readOnly'] ?? false;
    
    _originalContent = groupSetupLogic.groupInfo.value.notification ?? '';
    inputCtrl = TextEditingController(text: _originalContent);
    
    // 初始化状态
    _updateState();
    
     // 监听输入变化
    if (!isReadOnly.value) {
      inputCtrl.addListener(_updateState);
    }
    super.onInit();
  }

  @override
  void onClose() {
    inputCtrl.removeListener(_updateState);
    inputCtrl.dispose();
    super.onClose();
  }

  String get title => isReadOnly.value ? '群公告' : '编辑群公告';

  // 获取当前字符数
  int get currentLength => _currentLength.value;

  // 检查是否可以保存
  bool get canSave => _canSave.value;

  // 更新状态
  void _updateState() {
    _currentLength.value = inputCtrl.text.length;
    // 比较当前内容和原始内容是否不同
    _canSave.value = inputCtrl.text.trim() != _originalContent.trim();
  }

  void save() async {
    if (!canSave) {
      IMViews.showToast('内容没有变化');
      return;
    }
    
    if (inputCtrl.text.trim().length > maxLength) {
      IMViews.showToast('群公告不能超过${maxLength}个字符');
      return;
    }

    try {
      await LoadingView.singleton.wrap(asyncFunction: () async {
        // 使用和group_setup_logic.dart中相同的方式调用setGroupInfo
        await OpenIM.iMManager.groupManager.setGroupInfo(
          GroupInfo(
            groupID: groupSetupLogic.groupInfo.value.groupID,
            notification: inputCtrl.text.trim(),
          ),
        );
      });
      
      // 保存成功后，更新原始内容，这样用户可以继续编辑
      _originalContent = inputCtrl.text.trim();
      _updateState();
      
      IMViews.showToast(StrRes.setSuccessfully);
      Get.back();
    } catch (e) {
      print('保存群公告失败: $e');
      IMViews.showToast('保存失败: $e');
    }
  }

  // 清空公告
  void clearAnnouncement() {
    inputCtrl.clear();
    _updateState();
  }

  // 重置为原始内容
  void resetAnnouncement() {
    inputCtrl.text = _originalContent;
    _updateState();
  }
}